package com.kexio.file.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.kexio.file.entity.FileStorageConfig;

/**
 * 文件存储配置 Mapper 接口
 * 
 * @author Kexio Team
 * @since 1.0.0
 */
@Mapper
public interface FileStorageConfigMapper extends BaseMapper<FileStorageConfig> {

    /**
     * 根据租户ID获取默认存储配置
     * 租户ID由 MyBatis-Plus 租户拦截器自动处理
     * 
     * @return 默认存储配置
     */
    FileStorageConfig selectDefaultByTenantId();

    /**
     * 根据租户ID和存储类型获取配置列表
     * 租户ID由 MyBatis-Plus 租户拦截器自动处理
     * 
     * @param configType 存储类型
     * @return 配置列表
     */
    List<FileStorageConfig> selectByTenantIdAndType(@Param("configType") String configType);

    /**
     * 根据租户ID获取启用的配置列表
     * 租户ID由 MyBatis-Plus 租户拦截器自动处理
     * 
     * @return 启用的配置列表
     */
    List<FileStorageConfig> selectEnabledByTenantId();

    /**
     * 清除指定租户的所有默认配置标记
     * 租户ID由 MyBatis-Plus 租户拦截器自动处理
     * 
     * @return 影响行数
     */
    @Update("UPDATE sys_file_storage_config SET is_default = FALSE, update_time = CURRENT_TIMESTAMP " +
            "WHERE deleted = 0")
    int clearDefaultByTenantId();

    /**
     * 设置指定配置为默认配置
     * 租户ID由 MyBatis-Plus 租户拦截器自动处理
     * 
     * @param configId 配置ID
     * @return 影响行数
     */
    @Update("UPDATE sys_file_storage_config SET is_default = TRUE, update_time = CURRENT_TIMESTAMP " +
            "WHERE id = #{configId} AND deleted = 0")
    int setAsDefault(@Param("configId") String configId);

    /**
     * 更新配置的启用状态
     * 
     * @param configId 配置ID
     * @param enabled 启用状态
     * @return 影响行数
     */
    @Update("UPDATE sys_file_storage_config SET is_enabled = #{enabled}, update_time = CURRENT_TIMESTAMP " +
            "WHERE id = #{configId} AND deleted = 0")
    int updateEnabledStatus(@Param("configId") String configId, @Param("enabled") Boolean enabled);

    /**
     * 批量更新排序
     * 
     * @param configs 配置列表（包含ID和排序字段）
     * @return 影响行数
     */
    int batchUpdateSortOrder(@Param("configs") List<FileStorageConfig> configs);

    /**
     * 统计指定租户的配置数量
     * 租户ID由 MyBatis-Plus 租户拦截器自动处理
     * 
     * @return 配置数量
     */
    int countByTenantId();

    /**
     * 检查配置名称是否已存在（用于唯一性验证）
     * 租户ID由 MyBatis-Plus 租户拦截器自动处理
     * 
     * @param configName 配置名称
     * @param excludeId 排除的配置ID（编辑时使用）
     * @return 存在的配置数量
     */
    int countByNameAndTenant(@Param("configName") String configName, 
                            @Param("excludeId") String excludeId);
}
